package com.pwser.ehcache;

import net.sf.ehcache.CacheException;

import org.springframework.cache.annotation.CacheEvict;
import org.springframework.cache.annotation.CachePut;
import org.springframework.cache.annotation.Cacheable;
import org.springframework.stereotype.Service;

@Service
public class UserService {

	//这里的单引号不能少，否则会报错，被识别是一个对象
	private static final String CACHE_KEY = "'user'";
	private static final String DEMO_CACHE_NAME = "testEhCache";

	//删除用户数据
	//@CacheEvict   将一条或者多条数据从缓存中删除
	@CacheEvict(value = DEMO_CACHE_NAME, key = "'user_'+#userId")
	public void delete(String userId) {
		System.out.println("#####删除成功#####" + userId);
	}

	//更新用户数据
	//@CachePut   无论怎样，都将方法的返回结果放到缓存当中。
	@CachePut(value = DEMO_CACHE_NAME, key = "'user_'+#user.getUserId()")
	public User update(User user) throws CacheException {
		System.out.println("#####更新成功#####" + user.getUserId());
		return user;
	}

	//查找用户数据
	//@Cacheable  在方法执行前Spring先是否有缓存数据，如果有直接返回。如果没有数据，调用方法并将方法返回值存放在缓存当中。
	@Cacheable(value = DEMO_CACHE_NAME, key = "'user_'+#userId")
	public User findByUserId(String userId) {
		//若找不到缓存将打印出提示语句
		System.err.println("#####没有走缓存，去查询数据库了#####" + userId);
		User userNew = new User();
		userNew.setUserId(Integer.parseInt(userId));
		userNew.setUserName("aaa");
		return userNew;
	}

	//保存用户数据
	@CacheEvict(value = DEMO_CACHE_NAME, key = CACHE_KEY)
	public int save(User user) {
		System.out.println("#####保存成功#####" + user.getUserId());
		return 1;
	}
}